# # 函数多返回值
# def get_sum(num):
#     # 计算奇数和、偶数和、总和
#     sum = 0
#     odd_sum = 0
#     even_sum = 0
#     for i in range(1, num+1):
#         if i % 2 == 0: # 偶数
#             even_sum += i
#         else: # 奇数
#             odd_sum += i
#         # 总和
#         sum += i
#     return odd_sum, even_sum, sum
#
# result = get_sum(10)
# print(type(result)) # 元组类型
# # 使用多变量赋值操作（解包）
# a,b,c = result
# print(a,b,c)


# 局部变量:函数的参数、函数内定义的变量
# def fun(a):
#     b = 10
#     a = b

# print(a) # error
# print(b) # error

# 全局变量：函数外定义+函数内定义时，使用global关键字声明
# def fun2(a): # 参数不能使用global声明
#     global b # 不能在声明时，去赋值
#     b = 100
#
# c = 200
# fun2(1) # 在打印b的值之前得调用fun函数去初始化b的值才行
# print(b) # 不能在别的函数中出现同名的变量
# print(c)


# # 全局变量与局部变量同名，遵循局部变量优先
# def fun():
#     a = 10
#     print(a)
#
# a = 100
# fun()


# # 使用普通的函数：
# def fun(a, b):
#     return a+b
#
# print(fun(1,2))
#
# # 使用匿名函数：lambda
# # a,b 是参数，a+b是函数体
# result = lambda a,b:a+b
# # result是一个函数，可以去调用它
# print(result(1,2))
# # 因为这里是将这个匿名函数赋值给了result
# # result可以反复使用，但是匿名函数却只能使用一次
# print(result(1,2))


# lst = [1,2,3,4,5]
# for i in range(len(lst)):
#     print(lst[i],end='\t')
# print()
#
# # 使用匿名函数
# for i in range(len(lst)):
#     # 参数是lst，函数体是print(lst[i])
#     result = lambda lst: print(lst[i],end=' ')
#     print(result(lst))


# 函数递归
# # 阶乘的计算
# def fac(n):
#     # 当 n == 1时，已经知道了其阶乘的值了，可以不用继续计算了
#     # 因此直接返回其值即可，而其余情况，则是 n! = n * (n-1)!
#     if n == 1:
#         return 1
#     return n*fac(n-1)
#
# print(fac(5))
#
# # 斐波那契数列
# def fib(n):
#     # 当 n==1 或者 n==2时，我们已经知道了值为1
#     # 因此直接返回即可，但 n是其他值时，我们需要递归计算
#     if n == 1 or n == 2:
#         return 1
#     return fib(n-1) + fib(n-2)
#
# print(fib(10))

# 能用递归解决的，都可以使用循环来解决
# 阶乘
# def fac(n):
#     sum = 1 # 这里初始化的结果一定不能是0
#     for i in range(1, n+1):
#         sum *= i
#     return sum
#
# print(fac(5))
#
# # 斐波那契数列：将全部的数都存储起来
# def fib(n):
#     lst = [1,1]
#     if n == 1 or n == 2:
#         if n == 1:
#             return lst[0]
#         else:
#             return lst
#     # 循环计算
#     for i in range(2, n): # 这里的i是列表的索引，因此第三项的索引是2
#         # fib(i) = fib(i-1)+fib(i-2)
#         sum = (lst[i-1]+lst[i-2])
#         lst.append(sum)
#     return lst
#
# print(fib(10))
#

# i = 1
# def fun():
#     global i
#     print('这是第{0}次调用fun()函数'.format(i))
#     i += 1
#     fun()
#
# fun()